#ifndef SFTS_CLIENT_API_H
#define SFTS_CLIENT_API_H

#ifdef __cplusplus
extern "C"
{
#endif

    /**
     * @brief 初始化客户端连接到服务器
     * @param server_ip 服务器IP地址
     * @param port 服务器端口
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_init_connection(const char *server_ip, int port);

    /**
     * @brief 用户登录
     * @param username 用户名
     * @param password 密码
     * @return 0表示登录请求已发送，非0表示错误代码
     */
    int sfts_client_login(const char *username, const char *password);

    /**
     * @brief 用户注册
     * @param username 用户名
     * @param password 密码
     * @return 0表示注册请求已发送，非0表示错误代码
     */
    int sfts_client_register(const char *username, const char *password);

    /**
     * @brief 请求文件列表
     * @param path 请求的路径，"."表示当前目录
     * @return 0表示请求已发送，非0表示错误代码
     */
    int sfts_client_request_file_list(const char *path);

    /**
     * @brief 上传文件
     * @param local_path 本地文件路径
     * @param remote_path 服务器端文件路径
     * @return 0表示上传请求已发送，非0表示错误代码
     */
    int sfts_client_upload_file(const char *local_path, const char *remote_path);

    /**
     * @brief 下载文件
     * @param remote_path 服务器端文件路径
     * @param local_path 本地文件路径
     * @return 0表示下载请求已发送，非0表示错误代码
     */
    int sfts_client_download_file(const char *remote_path, const char *local_path);

    /**
     * @brief 删除文件
     * @param remote_path 服务器端文件路径
     * @return 0表示删除请求已发送，非0表示错误代码
     */
    int sfts_client_delete_file(const char *remote_path);

    /**
     * @brief 取消当前传输
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_cancel_transfer();

    /**
     * @brief 获取当前传输进度
     * @param percent_complete 传输完成百分比
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_get_transfer_progress(int *percent_complete);

    /**
     * @brief 断开连接并清理资源
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_disconnect();

    /**
     * @brief 用户退出登录
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_logout();

    /**
     * @brief 改变当前工作目录
     * @param directory_path 目标目录路径
     * @return 0表示成功，非0表示错误代码
     */
    int sfts_client_change_directory(const char *directory_path);

#ifdef __cplusplus
}
#endif

#endif // SFTS_CLIENT_API_H